package ar.com.sne.model.dao.dom;

import java.util.Date;
import java.util.List;

import org.apache.log4j.Logger;
import org.hibernate.Criteria;
import org.hibernate.criterion.MatchMode;
import org.hibernate.criterion.Restrictions;

import foundation.common.util.FinderFilter;
import foundation.common.util.PagedFinder;
import ar.com.sne.dao.GenericDAO;
import ar.com.sne.model.bo.dom.DomMercaderia;
import ar.com.sne.model.enumeration.dom.TipoMercaderia;
import ar.com.sne.util.StringUtil;

/**
 * DAO para el objeto del modelo: DomMercaderia.
 * @author Andrei
 */

public class DomMercaderiaDAO extends GenericDAO{

	public DomMercaderiaDAO() {
		super(DomMercaderia.class);
	}
	
	public DomMercaderiaDAO(Class boClass) {
		super(boClass);
	}

	private Logger log = Logger.getLogger(DomMercaderiaDAO.class);
	
	public PagedFinder findPaging(PagedFinder pf) {
		Criteria criteria =this.ListterFilter(pf.getFilter());		
		pf.setCount(super.getCount(criteria));
		criteria = this.ListterFilter(pf.getFilter());				
		criteria.setMaxResults(pf.getMaxResult());
		criteria.setFirstResult(pf.getFirstResult());
		pf.setResultList(criteria.list());		
		return pf;
	}
	
	private Criteria ListterFilter(FinderFilter filter){
		Criteria criteria = this.currentSession().createCriteria(DomMercaderia.class);
		
		Date fecha = (Date)filter.getFilterValue("fechaCosecha");
		if(fecha != null){
			criteria.add(Restrictions.eq("cosecha",fecha));
		}
		
		String nombre = (String) filter.getFilterValue("nombre");
		if(!StringUtil.isNullOrEmpty(nombre)){
			criteria.add(Restrictions.ilike("nombre",nombre,MatchMode.ANYWHERE));
		}
		
		TipoMercaderia tipo = (TipoMercaderia) filter.getFilterValue("tipoMercaderia");
		if(tipo != null){
			criteria.add(Restrictions.eq("tipo",tipo));
		}
		
		return criteria;
	}
	
	public List<DomMercaderia> findAll(){
		return this.getList();
	}
	
	public List<DomMercaderia> find(FinderFilter filter) {
		Criteria criteria =this.ListterFilter(filter);
		return criteria.list();
	}
}
